package com.interview02;

/**
 * Copyright (C), 2018-2020
 * FileName: Demo6
 * Author:   kongfanyu
 * Date:     2020/12/16 20:41
 */
public class Demo6 {
    private static StringBuffer buffer = new StringBuffer();

    public static void main(String[] args) {
        reverse("中公教育欢迎你");
        System.out.println("---" + buffer.toString());
    }

    public static String reverse(String str) {
        if (str == null || str.length() == 0) {
            return str;
        }
        System.out.println("===" + str.charAt(0));
        buffer.insert(0, str.charAt(0));
        System.out.println("###" + str);
        return reverse(str.substring(1)) + str.charAt(0);
    }
    public static String reverse2(String originStr) {
        if(originStr == null || originStr.length() <= 1) {
            return originStr;
        }
        return reverse2(originStr.substring(1)) + originStr.charAt(0);
    }
    /*
    return reverse(originStr.substring(1)) + originStr.charAt(0);这行语句中，originStr.charAt(0)是将originStr这个字符串的
第一位拿出来；
而reverse(originStr.substring(1))中的originStr.substring(1)表示把originStr这个字符串的索引为1及之后的字符（也就是originStr字符串
的第二个字符以后的子串，即"23456"）拿出来。所以，执行一次递归后，“123456”字符串被分解为“23456”+‘1’。
由于return reverse(originStr.substring(1)) + originStr.charAt(0);这行语句中，reverse方法的存在，执行第二次递归，此时
originStr=“23456”，所以执行完第二次递归后，“23456”分解为“3456”+‘2’。
...依次类推，最后一次调用reverse方法时，也就是originStr = "6"，可以看出字符串"6"满足if(originStr == null || originStr.length() <= 1)
中的第二个条件，所以执行if条件下的语句，
也就是返回originStr，即字符串"6"。所以整个调用栈就依次返回“6”+‘5’+‘4’+‘3’+‘2’+‘1’ = “654321”。
最后，控制台输出打印“654321”。

     */
}
